/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package HashMatrix2;

import java.util.ArrayList;

/**
 *
 * @author marko
 */
public class HashMatrix2 extends Matrix{
      // тип хранения данных: массив или хэш-таблица
      public static byte ARRAY_TYPE = 0;
      public static byte HASH_TYPE = 1;
      // jp - строки верхней полуматрицы
      // jm - столбцы нижней полуматрицы
      // dd - главная диагональ
      private IRow[] rows;
      //private double[] dd;
      // конструктор матрицы
      // type - тип хранения данных ARRAY_TYPE/HASH_TYPE
      // N - порядок матрицы
      public HashMatrix2(byte type, int N){
        super(N);
        //dd = new double[N];
        if (type==HASH_TYPE){
            rows = new Hash[N];
            //jm = new Hash[N];
            for (int i=0; i<N; i++){
                rows[i] = new Hash();
                //jm[i] = new Hash();
            }
        }else{
            rows = new Array[N];
            //jm = new Array[N];
            for (int i=0; i<N; i++){
                rows[i] = new Array();
                //jm[i] = new Array();
            }
        }
      }

       public void setValue(int row, int col, double value){
            rows[row].setValue(col, value);
      }

      public void addValue(int row, int col, double value){
            if (value==0) return;
            rows[row].addValue(col, value);
      }
      
      public double getValue(int row, int col){
            
            return rows[row].getValue(col);
      }

      public void getJRow(int d, int[] indexes, double[] values){
            
      }

      public void getJCol(int d, int[] indexes, double[] values){

      }

    public void getJCol(int d, ArrayList<Integer> indexes, ArrayList<Double> values) {
    }

    public void removeRow(int pos){
        IRow[] tmp = new IRow[getN()-1];
        for (int i = 0; i < pos; i++) {
            tmp[i] = rows[i];
            tmp[i].removeCell(pos);
        }

        for (int i = pos+1; i < rows.length; i++) {
            tmp[i-1] = rows[i];
            tmp[i-1].removeCell(pos);
        }

        rows = tmp;


        /*for (int i = 0; i < tmp.length; i++) {
        IRow iRow = tmp[i];
        ArrayList<Integer> tempRow= iRow.getIndexes();
        for (int j = 0; j < tempRow.size(); j++) {
        int inttemp = tempRow.get(j);
        if(inttemp>pos){
        tempRow.set(j, inttemp-1);
        }
        }
        }*/

    }

    @Override
    public int getN() {
        return rows.length;
    }


    public ArrayList<Integer> getJColIndex(int d) {
        return null;
        //return rows[d].getIndexes();
    }

    public ArrayList<Double> getJColValues(int d) {
        //return rows[d].getValues();
        return null;
    }

    public ArrayList<Integer> getJRowIndex(int d) {
        return rows[d].getIndexes();
    }

    public ArrayList<Double> getJRowValues(int d) {
        //return jp[d].getValues();
        return rows[d].getValues();
    }

}
